package jrunner;

import java.io.*;

import javax.swing.*;

public class diamonds {


	/**
	 * Sodala, ich habs hinbekommen, ich hoffe mal es ist so wie du es dir vorgestellt hast, aber ich glaube
	 * nach diesem Beispiel werd ich Albträume von Schleifen bekommen :) 
	 * Naja bezüglich meiner Vorgehensweise, die ist etwas wirr, ich hab die Ausgabe in 3 Teile gegliedert
	 * und zwar der erste ist der Teil bevor die Kette die Mitte erreicht, 
	 * Der Zweite Teil ist die Mitte
	 * Und der Dritte Teil ist der Teil nach der Mitte
	 * Wie du siehst ist es nicht sonderlich elegant, ich benutze leider sehr viele Hilfsvariablen, aber hey 
	 * das Programm macht immerhin das was es tun soll ;) 
	 
	 *
	 *
	 *Exceptions einbauen: leere Werte, Buchstaben, negative Werte, gerade Zahlen, Nullen. 
	 *
	 *Diamantobjekt speichern (als Objekt und als Textfile menschlesbar(Stringklasse) 
	 *
	 *überladbare Methoden 
	 *
	 *
	 *
	 *
	 *
	 */
	
	
	public void print(int a)
    {
  	 
		
		int number=a;
		
	       int middle=number/2+1;
		    int level=1;
		    int stars=1;
		    int lauf=1;
		    int lauf2=middle;
		    int lauf3=1;
		    int lauf4=1; 
			       		
		       	
		      			    	
		    	   for(int k=1;k<number;k++)
		    	   {
		    		  
		    		   if (level <middle) 
				       {
		    		   
		    			   
		    		    for(int hilf=lauf;hilf<middle;hilf++)
		    		    {	
		    		    	System.out.print(".");
		    		        
		    		    }
		    		    	
		    		    for (int z=0;z<stars;z++)
		    		        System.out.print("*");
		    		    
		    		    for (int hilf2=lauf2;hilf2<number;hilf2++)
		    		    	System.out.print(".");
		    		    	
		    		   System.out.println(" ");
		    		   level+=1;
		    		   stars+=2;
		    	       lauf+=1; 
				       lauf2+=1;
				       }
		    		 
		    		   if(level==middle)
				       {
				    	   
		    			  
				    	   for(int m=0;m<number;m++)
				    		   System.out.print("*");
				           
				    	   stars=number;
		    			   System.out.print("\n");
				    	   level+=1;
				       } 

		    	
		    		   
		    		   if (level >middle && level<= number) 
				       {
		    		   stars-=2;
		    		   
		    		   for(int y=0;y<lauf3;y++)
		    			   System.out.print(".");
		    		   
		    		   for(int p=0;p<stars;p++)
		    			   System.out.print("*");
		    		   
		    		  
		    		   for(int o=0;o<lauf4;o++)
		    			   System.out.print(".");
		    		   
		    		   System.out.println(" ");
		    		   level+=1;
		    		   lauf3+=1;
		    	       lauf4+=1;
				       
				      
				       					       
				       }
		    	   
		    	   }
                  
   
    }
	
	
	
	
	
	
	public void cut(int b)
	{   
		b= b-2;;
		print(b);
	}
	
	
	
	public void append(int c)
	{
      
	int number=c;
		
 	   for(int w=1;w<(number/2+2);w++)
 	   {
 		   System.out.print("|");
 		   System.out.print(" ");
 	   }
   
 	   System.out.print("\n");
 	   
        for(int e=1;e<(number/2+2);e++)
        {
     	   System.out.print("x");
     	   System.out.print(" ");
        }
	}
	
	
	
	
	
	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
   
		diamonds chain=new diamonds();
		

			
		  
			
		//Read Console Input
		
		BufferedReader console = new BufferedReader(new InputStreamReader(System.in));
		System.out.print("How many elements?  ");
		String line = null;
		try {
			line = console.readLine();
		} 
		catch (IOException e)
       
		{
			//should never happen
		}

			
		
		catch (NumberFormatException e) {
		
			System.out.println("Ups, da ist ein Fehler passiert! ");
			e.printStackTrace();
		}
		
		catch (Exception e)
		{
			System.out.println("Test");
		}
  

		int intnumber = Integer.parseInt(line);    //type conversion

		Integer number = new Integer(intnumber);
	/*	  
		 while ( true )
		    {
		      try
		      {
		        String s = JOptionPane.showInputDialog(
		                     "Bitte Zahl eingeben" );
		        number = Integer.parseInt( s );
		        
		        
		        
		        break;                                      //wenn die Zahl nicht konvertiert werden kann 
		        }                                             //läuft die Schleife weiter zur Exception
		      catch ( NumberFormatException e )
		      {

		    	  System.err.printf("Bad Input, conversion to"+ "\n"+" Integer not possible"+"\n");

		    			    
		      }
		       
		    
		    
		    }
		
	*/	 
			    chain.print(number);
			    chain.append(number);
			    
			    System.out.println("\n"+ "--------------------");
			    System.out.println("cut: ");   
			    System.out.println("--------------------");
			    
			    chain.cut(number);
			    chain.append((number-2));
			   
			    		    
	   			    
		   			    
			  
	
	}

}
